﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Entidad;
using System.Data.SqlClient;
namespace DAO
{
   
   public class GestorUsuariosDAO
    {

       private DAO_v2 dao;
       public GestorUsuariosDAO()
        {
            dao = new DAO_v2();
            
        }
       public string CadenaConexion()
       {
           return DAO_v2.MiCadenaConexion();
           //return dao.StringConexion();
       }

       public UsuarioEnt verificarUsuario(int legajo)
       {
           UsuarioEnt resultado = new UsuarioEnt();


           SqlConnection cn = new SqlConnection(CadenaConexion());
           try
           {

               cn.Open();
               List<String> columnas = new List<String>();
               List<String> parametros = new List<String>();
               List<Object> datos = new List<Object>();
               columnas.Add("legajo");
               columnas.Add("id_Persona");
               columnas.Add("eMail");
               columnas.Add("contraseña");
               columnas.Add("activo");
               columnas.Add("fechaCreacion");
               parametros.Add("legajo");
               datos.Add(legajo);
               SqlCommand cmd = dao.Buscar("Usuario", columnas, parametros, datos);
               cmd.Connection = cn;
               SqlDataReader dr = cmd.ExecuteReader();
               if (dr.Read())
               {
                   resultado.Legajo = int.Parse(dr["legajo"].ToString());
                   resultado.PersonaID = int.Parse(dr["id_Persona"].ToString());
                   resultado.Email = dr["eMail"].ToString();
                   resultado.Contraseña = dr["contraseña"].ToString();
                   resultado.Activo = Boolean.Parse(dr["activo"].ToString());
                   resultado.FechaCreacion = DateTime.Parse(dr["fechaCreacion"].ToString());

                   return resultado;
               }
               return resultado = null;
               
           }
           catch (SqlException ex)
           {
              
               throw new ApplicationException("Error al verificar el usuario...");
           }
           finally
           {
               if (cn.State == System.Data.ConnectionState.Open)
               {
                   cn.Close();
               }
           }
       }

       public bool verificarContraseña(string contraseña,UsuarioEnt user )
       {

           SqlConnection cn = new SqlConnection(CadenaConexion());
           try
           {


               
               cn.Open();
               UsuarioEnt aux = new UsuarioEnt();
               List<String> columnas = new List<String>();
               List<String> parametros = new List<String>();
               List<Object> datos = new List<Object>();
               columnas.Add("contraseña");
               parametros.Add("legajo");
               datos.Add(user.Legajo);
               SqlCommand cmd = dao.Buscar("Usuario", columnas, parametros, datos);
               cmd.Connection = cn;
               SqlDataReader dr = cmd.ExecuteReader();
               if (dr.Read())
               {
                   aux.Contraseña = dr["contraseña"].ToString();

               }
               {
                   if (user.Contraseña.Equals(aux.Contraseña))
                   {
                       return true;
                   }
                   else
                   {
                       return false;
                   }
               }        
               
            }
             
        
           catch (SqlException ex)
           {
               return false;
               throw new ApplicationException("Error al verificar contraseña...");
           }
           finally
           {
               if (cn.State == System.Data.ConnectionState.Open)
               {
                   cn.Close();
               }
           }
       }

       public int obtenerRolUsuario(string usuario)
       {
           int resultado=0;
           SqlConnection cn = new SqlConnection(CadenaConexion());
           try
           {
               cn.Open();
               List<String> columnas = new List<String>();
               List<String> parametros = new List<String>();
               List<Object> datos = new List<Object>();
               columnas.Add("id_Rol");
               parametros.Add("legajo");
               datos.Add(usuario);
               SqlCommand cmd = dao.Buscar("Usuario", columnas, parametros, datos);
               cmd.Connection = cn;
               SqlDataReader dr = cmd.ExecuteReader();
               if (dr.Read())
               {
                   resultado = int.Parse(dr["id_Rol"].ToString());   

               }
               return resultado;
           }
           catch (SqlException ex)
           {
               return 0;
               throw new ApplicationException("Error al encontrar rol...");
               
           }
           finally
           {
               if (cn.State == System.Data.ConnectionState.Open)
               {
                   cn.Close();
               }
           }
       
       }

       public String ObtenerNombre(int legajo)
       {
           SqlConnection con = new SqlConnection(CadenaConexion());
           SqlCommand cmd = new SqlCommand();
           try
           {
               con.Open();
               cmd.Connection = con;
               String consulta = "SELECT (P.nombre + ' ' +  P.apellido) as Nombre ";
               consulta += "FROM Persona P ";
               consulta += "INNER JOIN Usuario U ON U.id_Persona = P.id_Persona ";
               consulta += "WHERE U.legajo = @legajo ";
               cmd.Parameters.AddWithValue("@legajo", legajo);
               cmd.CommandText = consulta;
               String nombre = cmd.ExecuteScalar().ToString();
               return nombre;
           }
           finally
           {
               if (con.State == System.Data.ConnectionState.Open)
               {
                   con.Close();
               }
           }
       }
    }

}
